//package com.example.mongo.appmongo.config;
//
//import org.springframework.lang.Nullable;
//import org.springframework.transaction.annotation.AnnotationTransactionAttributeSource;
//import org.springframework.transaction.interceptor.DefaultTransactionAttribute;
//import org.springframework.transaction.interceptor.TransactionAttribute;
//import org.springframework.util.ClassUtils;
//import org.springframework.util.StringValueResolver;
//
//import java.lang.reflect.Method;
//
///**
// * @author sjw
// * @className UserAnnotationTransactionAttributeSource
// * @date 2021/9/29 18:53
// * @description: TODO
// */
//public class UserAnnotationTransactionAttributeSource extends AnnotationTransactionAttributeSource {
//
//    private StringValueResolver embeddedValueResolver1;
//
//    @Override
//    public void setEmbeddedValueResolver(StringValueResolver resolver) {
//        this.embeddedValueResolver1 = resolver;
//        super.setEmbeddedValueResolver(resolver);
//    }
//
//    @Override
//    @Nullable
//    public TransactionAttribute getTransactionAttribute(Method method, @Nullable Class<?> targetClass) {
//        if (method.getDeclaringClass() == Object.class) {
//            return null;
//        }
//
//        // First, see if we have a cached value.
//        Object cacheKey = getCacheKey(method, targetClass);
//        TransactionAttribute cached = null;//this.attributeCache.get(cacheKey);
//        if (cached != null) {
//
//        } else {
//            // We need to work it out.
//            TransactionAttribute txAttr = computeTransactionAttribute(method, targetClass);
//            // Put it in the cache.
//            if (txAttr != null) {
//                {
//                    String methodIdentification = ClassUtils.getQualifiedMethodName(method, targetClass);
//                    if (txAttr instanceof DefaultTransactionAttribute) {
//                        DefaultTransactionAttribute dta = (DefaultTransactionAttribute) txAttr;
//                        dta.setDescriptor(methodIdentification);
//                        dta.resolveAttributeStrings(this.embeddedValueResolver1);
//                    }
//                    if (logger.isTraceEnabled()) {
//                        logger.trace("Adding transactional method '" + methodIdentification + "' with attribute: " + txAttr);
//                    }
//                    // this.attributeCache.put(cacheKey, txAttr);
//                }
//                return txAttr;
//            }
//        }
//        return null;
//    }
//}
